function baseband_signal = downconvert_signal(received_signal, carrier_freq, fs, bandwidth)
% downconvert_signal - 将接收信号下变频到基带
%
% 输入参数:
%   received_signal - 接收的混合信号
%   carrier_freq    - 载波频率 (Hz)
%   fs              - 采样频率 (Hz)
%   bandwidth       - 用户带宽 (Hz)
%
% 输出参数:
%   baseband_signal - 下变频后的基带信号

% 创建时间向量
t = (0:length(received_signal)-1)/fs;

% 下变频 - 将信号乘以复指数，将目标频带搬移到基带
complex_baseband = received_signal .* exp(-1i*2*pi*carrier_freq*t);

% 设计低通滤波器参数
% 截止频率设为用户带宽的一半
cutoff_freq = bandwidth/2;
filter_order = 64;  % 滤波器阶数

% 创建低通滤波器
h = fir1(filter_order, 2*cutoff_freq/fs);

% 应用低通滤波器，提取下变频后的用户信号
baseband_signal = filter(h, 1, complex_baseband);

% 对滤波后的信号进行抽取，因为实际的调制符号速率比采样率低
% 注意：在实际系统中，这一步应该使用合适的抽取率和计时恢复
% 为简化，我们这里直接取每8个样本中的1个
decimation_factor = 8;
baseband_signal = baseband_signal(1:decimation_factor:end);

% 归一化信号
baseband_signal = baseband_signal / sqrt(mean(abs(baseband_signal).^2));

end 